/*
 * Created on 15.12.2003
 */

package vitalsWindow;

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.events.*;
import vitalsFacade.*;

/**
 <code>ClinicalGUI</code> Is the userinterface of CIS. Provides access to
 * the system's full functionality and shows the patient's data.
 
 @author Sascha Hemminger
 @version 2006-02-10
 */
public class ClinicalGUI {
  private Image crossImage;

  private Display display;

  private VitalsFacade facade;

  private Button female, male, loadButton, shock, upDate, close, aware,
      verbal, pain, unresponsive;

  private Text height, weight, bmi, heartRate, breathRate, loadName,
      systolic, diastolic;

  private Label loadNameLabel, genderLabel, heightLabel, weightLabel, ft_in,
      pounds, bmiLabel, kgmm, bmiName, heartRateLabel, heartRateName,
      heartBeat, breathRateLabel, breathRateName, breathMin,
      bloodPressureLabel, mmHg, mmhg2, systolicName, diastolicName,
      systolicLabel, diastolicLabel, locLabel;

  private MouseAdapter mouseAdapter = new MouseAdapter() {
    public void mouseDown(MouseEvent e) {
      clicked(e.getSource());
    }
  };

  private Composite patient, values, general, genderComp;

  private Shell shell;

  private Color white, green, yellow, red, blue;

  /**
   * Constructor initializes application and shows window.
   */
  public ClinicalGUI() {

    facade = new VitalsFacade(null);
    display = new Display();
    shell = new Shell(display);
    //crossImage = new Image(display,"cross.png");

    //welcomeScreen();
    setUp();
  }

  private void clicked(Object whatClicked) {
    if (whatClicked == close)
      shell.close();
    if (whatClicked == loadButton) {
      try {
        facade.setSubject(loadName.getText());
        loadData();
      catch (NullPointerException npe) {
        MessageBox box = new MessageBox(shell);
        box
            .setMessage("Not an existing Patient: "
                + loadName.getText());
        box.setText("Error");
        box.open();
      }
    }

    if (whatClicked == upDate) {
      if (facade.getSubject() == null) {
        MessageBox box = new MessageBox(shell);
        box.setMessage("No Patient loaded!");
        box.setText("Error");
        box.open();
        return;
      }
      setGender();
      setHeight();
      setWeight();
      setBreathRate();
      setHeartRate();
      setSystolicPressure();
      setDiastolicPressure();
      setLOC();
      setShock();
      facade.saveAttributes();
      loadData();
    }
  }

  private void getBMIName() {
    String bmiString = facade.getBMIName();
    bmiName.setText(bmiString);
    if (bmiString.equals("normal"))
      bmiName.setBackground(shell.getBackground());
    if (bmiString.equals("underweight"))
      bmiName.setBackground(blue);
    if (bmiString.equals("overweight"))
      bmiName.setBackground(yellow);
    if (bmiString.equals("obese"))
      bmiName.setBackground(red);
  }

  private void getBreathRateName() {
    String breathString = facade.getBreathingRateName();
    breathRateName.setText(breathString);
    if (breathString.equals("normal"))
      breathRateName.setBackground(shell.getBackground());
    if (breathString.equals("slow"))
      breathRateName.setBackground(blue);
    if (breathString.equals("fast"))
      breathRateName.setBackground(red);
  }

  private void getDiastolicName() {
    String diastolicString = facade.getBloodPressureDiastolicName();
    diastolicName.setText(diastolicString);
    if (diastolicString.equals("normal"))
      ;
    diastolicName.setBackground(shell.getBackground());
    if (diastolicString.equals("low"))
      diastolicName.setBackground(blue);
    if (diastolicString.equals("high"))
      diastolicName.setBackground(red);
  }

  private void getGender() {
    String gender = facade.getGender();
    if (gender.equals("male")) {
      male.setSelection(true);
      female.setSelection(false);
    }
    if (gender.equals("female")) {
      female.setSelection(true);
      male.setSelection(false);
    }
  }

  private void getHeartRateName() {
    String heartString = facade.getHeartRateName();
    heartRateName.setText(heartString);
    if (heartString.equals("normal"))
      heartRateName.setBackground(shell.getBackground());
    if (heartString.equals("slow"))
      heartRateName.setBackground(blue);
    if (heartString.equals("fast"))
      heartRateName.setBackground(red);
  }

  private void getLOC() {
    String loc = facade.getLevelOfConsciousness();
    if (loc.equals("aware")) {
      aware.setSelection(true);
      verbal.setSelection(false);
      pain.setSelection(false);
      unresponsive.setSelection(false);
      aware.setBackground(shell.getBackground());
      verbal.setBackground(shell.getBackground());
      pain.setBackground(shell.getBackground());
      unresponsive.setBackground(shell.getBackground());
    }
    if (loc.equals("verbal")) {
      aware.setSelection(false);
      verbal.setSelection(true);
      pain.setSelection(false);
      unresponsive.setSelection(false);
      aware.setBackground(shell.getBackground());
      verbal.setBackground(green);
      pain.setBackground(shell.getBackground());
      unresponsive.setBackground(shell.getBackground());
    }
    if (loc.equals("pain")) {
      aware.setSelection(false);
      verbal.setSelection(false);
      pain.setSelection(true);
      unresponsive.setSelection(false);
      aware.setBackground(shell.getBackground());
      verbal.setBackground(shell.getBackground());
      pain.setBackground(yellow);
      unresponsive.setBackground(shell.getBackground());
    }
    if (loc.equals("unresponsive")) {
      aware.setSelection(false);
      verbal.setSelection(false);
      pain.setSelection(false);
      unresponsive.setSelection(true);
      aware.setBackground(shell.getBackground());
      verbal.setBackground(shell.getBackground());
      pain.setBackground(shell.getBackground());
      unresponsive.setBackground(red);
    }
  }

  private void getShock() {
    if (facade.getShock()) {
      shock.setSelection(true);
      shock.setText("Patient is in shock!");
      shock.setBackground(red);
    }
    if (!facade.getShock()) {
      shock.setSelection(false);
      shock.setText("no shock");
      shock.setBackground(shell.getBackground());
    }
  }

  private void getSystolicName() {
    String systolicString = facade.getBloodPressureSystolicName();
    systolicName.setText(systolicString);
    if (systolicString.equals("normal"))
      systolicName.setBackground(shell.getBackground());
    if (systolicString.equals("low"))
      systolicName.setBackground(blue);
    if (systolicString.equals("high"))
      systolicName.setBackground(red);
  }

  /**
   * Loads all data for a patient.
   */
  public void loadData() {
    facade.loadAttributes();
    getGender();
    height.setText(facade.getHeight());
    weight.setText(facade.getWeight());
    bmi.setText(facade.getBMI().substring(05));
    getBMIName();
    heartRate.setText(facade.getHeartRate());
    getHeartRateName();
    breathRate.setText(facade.getBreathingRate());
    getBreathRateName();
    systolic.setText(facade.getBloodPressureSystolic());
    getSystolicName();
    diastolic.setText(facade.getBloodPressureDiastolic());
    getDiastolicName();
    getLOC();
    getShock();
  }

  private void setBreathRate() {
    facade.setBreathingRate(breathRate.getText());
  }

  private void setDiastolicPressure() {
    facade.setBloodPressureDiastolic(diastolic.getText());
  }

  private void setGender() {
    if (female.getSelection())
      facade.setGender("female");
    if (male.getSelection())
      facade.setGender("male");
  }

  private void setHeartRate() {
    facade.setHeartRate(heartRate.getText());
  }

  private void setHeight() {
    facade.setHeight(height.getText());
  }

  private void setLOC() {
    if (aware.getSelection())
      facade.setLevelOfConsciousness("aware");
    if (verbal.getSelection())
      facade.setLevelOfConsciousness("verbal");
    if (pain.getSelection())
      facade.setLevelOfConsciousness("pain");
    if (unresponsive.getSelection())
      facade.setLevelOfConsciousness("unresponsive");
  }

  private void setShock() {
    if (shock.getSelection())
      facade.setShock(true);
    if (!shock.getSelection())
      facade.setShock(false);
  }

  private void setSystolicPressure() {
    facade.setBloodPressureSystolic(systolic.getText());
  }

  private void setUp() {

    patient = new Composite(shell, SWT.BORDER);
    values = new Composite(shell, SWT.BORDER);
    general = new Composite(shell, SWT.BORDER);
    genderComp = new Composite(patient, SWT.NONE);

    white = new Color(display, 255255255);
    green = new Color(display, 5020050);
    yellow = new Color(display, 2452450);
    red = new Color(display, 25500);
    blue = new Color(display, 00245);

    patient.setBounds(1010390170);
    values.setBounds(10190390160);
    general.setBounds(10360390100);

    loadNameLabel = new Label(patient, SWT.NONE);
    genderLabel = new Label(genderComp, SWT.NONE);
    female = new Button(genderComp, SWT.RADIO | SWT.CENTER);
    male = new Button(genderComp, SWT.RADIO | SWT.CENTER);

    heightLabel = new Label(patient, SWT.NONE);
    height = new Text(patient, SWT.NONE);
    ft_in = new Label(patient, SWT.CENTER);

    weightLabel = new Label(patient, SWT.NONE);
    weight = new Text(patient, SWT.NONE);
    pounds = new Label(patient, SWT.CENTER);

    bmiLabel = new Label(patient, SWT.NONE);
    bmi = new Text(patient, SWT.NONE);
    kgmm = new Label(patient, SWT.CENTER);
    bmiName = new Label(patient, SWT.CENTER);

    heartRateLabel = new Label(values, SWT.NONE);
    heartRate = new Text(values, SWT.NONE);
    heartRateName = new Label(values, SWT.CENTER);
    heartBeat = new Label(values, SWT.CENTER);

    loadName = new Text(patient, SWT.BORDER);
    loadButton = new Button(patient, SWT.BUTTON1);

    breathRateLabel = new Label(values, SWT.NONE);
    breathRate = new Text(values, SWT.NONE);
    breathMin = new Label(values, SWT.CENTER);
    breathRateName = new Label(values, SWT.CENTER);

    bloodPressureLabel = new Label(values, SWT.NONE);
    systolic = new Text(values, SWT.CENTER);
    diastolic = new Text(values, SWT.CENTER);
    mmHg = new Label(values, SWT.CENTER);
    mmhg2 = new Label(values, SWT.CENTER);
    systolicName = new Label(values, SWT.CENTER);
    diastolicName = new Label(values, SWT.CENTER);
    systolicLabel = new Label(values, SWT.RIGHT);
    diastolicLabel = new Label(values, SWT.RIGHT);

    locLabel = new Label(general, SWT.NONE);

    shock = new Button(general, SWT.CHECK | SWT.CENTER);

    upDate = new Button(shell, SWT.BUTTON1);
    close = new Button(shell, SWT.BUTTON1);

    genderComp.setBounds(105039030);

    loadNameLabel.setText("Patient:");
    loadNameLabel.setBounds(10105030);

    genderLabel.setText("Gender:");
    genderLabel.setBounds(006020);

    female.setBounds(10008020);
    female.setText("female");
    male.setBounds(19008020);
    male.setText("male");

    loadName.setBackground(white);
    loadName.setText("enter name");
    loadName.setBounds(1101017030);

    loadButton.setText("search");
    loadButton.setSize(8030);
    loadButton.setLocation(29010);

    heightLabel.setText("Height:");
    heightLabel.setBounds(10805020);

    height.setBackground(white);
    height.setBounds(110808020);

    ft_in.setText("inches");
    ft_in.setBounds(200808020);

    weightLabel.setText("Weight:");
    weightLabel.setBounds(101105020);

    weight.setBackground(white);
    weight.setBounds(1101108020);

    pounds.setText("pounds");
    pounds.setBounds(2001108020);

    bmiLabel.setText("B.M.I.:");
    bmiLabel.setBounds(101405020);

    bmi.setBackground(white);
    bmi.setEditable(false);
    bmi.setBounds(1101408020);

    kgmm.setText("kg/m�");
    kgmm.setBounds(2001408020);

    bmiName.setBounds(2901408020);

    heartRateLabel.setText("Heart Rate:");
    heartRateLabel.setBounds(10107020);

    heartRate.setBackground(white);
    heartRate.setBounds(110108020);

    heartBeat.setText("beats/min");
    heartBeat.setBounds(200108020);

    heartRateName.setBounds(290108020);

    breathRateLabel.setText("Breathing Rate:");
    breathRateLabel.setBounds(10409020);

    breathRate.setBackground(white);
    breathRate.setBounds(110408020);

    breathMin.setText("breaths/min");
    breathMin.setBounds(200408020);

    breathRateName.setBounds(290408020);

    bloodPressureLabel.setText("Blood Pressure:");
    bloodPressureLabel.setBounds(10709020);

    systolicLabel.setText("Systolic");
    systolicLabel.setBounds(401006020);

    systolic.setBackground(white);
    systolic.setBounds(1101008020);

    mmHg.setText("mm Hg");
    mmHg.setBounds(2001008020);

    systolicName.setBounds(2901008020);

    diastolicLabel.setText("Diastolic");
    diastolicLabel.setBounds(401306020);

    diastolic.setBackground(white);
    diastolic.setBounds(1101308020);

    mmhg2.setText("mm Hg");
    mmhg2.setBounds(2001308020);

    diastolicName.setBounds(2901308020);

    locLabel.setBounds(10109020);
    locLabel.setText("Consciousness:");

    shock.setBounds(107037020);

    aware = new Button(general, SWT.RADIO | SWT.CENTER);
    verbal = new Button(general, SWT.RADIO | SWT.CENTER);
    pain = new Button(general, SWT.RADIO | SWT.CENTER);
    unresponsive = new Button(general, SWT.RADIO | SWT.CENTER);

    aware.setText("aware");
    verbal.setText("verbal");
    pain.setText("pain");
    unresponsive.setText("unresponsive");

    aware.setBounds(10408020);
    verbal.setBounds(100408020);
    pain.setBounds(195408020);
    unresponsive.setBounds(2804010020);

    upDate.setText("update");
    upDate.setBounds(1104708025);

    close.setText("close");
    close.setBounds(2004708025);
    close.addMouseListener(mouseAdapter);

    loadButton.addMouseListener(mouseAdapter);
    upDate.addMouseListener(mouseAdapter);

    shell.setSize(417540);
    shell.setText("Clinical Information System");
    shell.setImage(crossImage);

//    patient.pack();
//    values.pack();
//    general.pack();
//    genderComp.pack();
//    shell.pack();
    start();

  }

  private void setWeight() {
    facade.setWeight(weight.getText());
  }

  private void start() {

    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    //crossImage.dispose();
    display.dispose();

  }

  private void welcomeScreen() {

    Shell welcome = new Shell(display);
    Image cisImage = new Image(display, "cis.bmp");
    GC gc = new GC(welcome);

    welcome.setSize(400400);
    welcome.setText("Clinical Information System");
    welcome.setImage(crossImage);

    welcome.open();
    gc.drawImage(cisImage, 00);
    while (!welcome.isDisposed()) {
      if (display.readAndDispatch())
        display.sleep();
    }
    cisImage.dispose();
    welcome.dispose();
    setUp();

  }

}
Java2html